<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
<script>
	/*
	* 题目： 给定一个数组 nums 和一个目标值 target，在该数组中找出和为目标值的两个数
	* 输入： nums: [8, 2, 6, 5, 4, 1, 3] ； target:7
	* 输出： [2, 5]
	* */

	/*
	* 解题思路
	*标签：哈希映射
	这道题本身如果通过暴力遍历的话也是很容易解决的，时间复杂度在 O(n2)
	由于哈希查找的时间复杂度为 O(1)，所以可以利用哈希容器 map 降低时间复杂度
	遍历数组 nums，i 为当前下标，每个值都判断map中是否存在 target-nums[i] 的 key 值
	如果存在则找到了两个值，如果不存在则将当前的 (nums[i],i) 存入 map 中，继续遍历直到找到为止
	如果最终都没有结果则抛出异常
	* 方法一：暴力枚举
	* 方法二：哈希表
	* */

	function searchSum(arr, target) {
		for (let i = 0; i < arr.length -1; i++) {
			for (let j = i + 1; j < arr.length; j++) {
				if ((arr[i] + arr[j]) === target) {
					return [arr[i], arr[j]]
				}
			}
		}
	}
	let val = searchSum([8, 2, 6, 5, 4, 1, 3], 7)
	console.log(val)


	/*示例*/
	var twoSum = function(nums, target) {
		let map = new Map();
		for(let i = 0, len = nums.length; i < len; i++){
			if(map.has(target - nums[i])){
				return [map.get(target - nums[i]), i];
			}else{
				map.set(nums[i], i);
			}
		}
		return [];
	};
	let val2 = twoSum([8, 2, 6, 5, 4, 1, 3], 7)
	console.log(val2)
</script>
</body>
</html>